package test2.activemq.cluster;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

public class Consumer {
	
	public static void main(String[] args) throws JMSException {
//		String url = "failover://(tcp://localhost:61616,tcp://localhost:62626,tcp://localhost:63636)";
		String url = "tcp://localhost:61616";
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(url);
		// 创建Session，参数解释：
        // 第一个参数是否使用事务:当消息发送者向消息提供者（即消息代理）发送消息时，消息发送者等待消息代理的确认，没有回应则抛出异常，消息发送程序负责处理这个错误。
        // 第二个参数消息的确认模式：
        // AUTO_ACKNOWLEDGE ： 指定消息提供者在每次收到消息时自动发送确认。消息只向目标发送一次，但传输过程中可能因为错误而丢失消息。
        // CLIENT_ACKNOWLEDGE ： 由消息接收者确认收到消息，通过调用消息的acknowledge()方法（会通知消息提供者收到了消息）
        // DUPS_OK_ACKNOWLEDGE ： 指定消息提供者在消息接收者没有确认发送时重新发送消息（这种确认模式不在乎接收者收到重复的消息）。
		Connection conn = factory.createConnection();
		conn.start();
		/**
		 * 开启事务的请求需要将session commit之后才会将消息传递到服务器
		 */
		Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
		Destination destination = session.createQueue("queue");
		MessageConsumer mc = session.createConsumer(destination);
		
		mc.setMessageListener(new MessageListener() {
			
			@Override
			public void onMessage(Message message) {
				TextMessage tm = (TextMessage)message;
				try {
					System.out.println(tm.getText());
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		});
//		TextMessage tm = (TextMessage)mc.receive();
//		System.out.println(tm.getText());
		
//		session.commit();
//		session.close();
//		conn.close();
	}

}
